System.Collections.Generic.HashSet<, klasa T>

Ten artykuł zawiera dodatkowe uwagi dotyczące dokumentacji referencyjnej dla tego interfejsu API.

Klasa HashSet<T> udostępnia operacje zestawu o wysokiej wydajności. Zestaw to kolekcja, która nie zawiera zduplikowanych elementów i których elementy nie mają określonej kolejności.

Pojemność HashSet<T> obiektu to liczba elementów, które może pomieścić obiekt. HashSet<T> Pojemność obiektu jest automatycznie zwiększana w miarę dodawania elementów do obiektu.

Klasa HashSet<T> jest oparta na modelu zestawów matematycznych i udostępnia operacje zestawu o wysokiej wydajności podobne do uzyskiwania dostępu do kluczy Dictionary<TKey,TValue> kolekcji lub Hashtable . Mówiąc prosto, klasę HashSet<T> można traktować jako Dictionary<TKey,TValue> kolekcję bez wartości.

HashSet<T> Kolekcja nie jest sortowana i nie może zawierać zduplikowanych elementów. Jeśli duplikowanie kolejności lub elementów jest ważniejsze niż wydajność aplikacji, rozważ użycie List<T> klasy razem z Sort metodą .

HashSet<T> Udostępnia wiele operacji zestawu matematycznego, takich jak dodawanie zestawu (unii) i odejmowanie zestawu. W poniższej tabeli wymieniono podane HashSet<T> operacje i ich odpowiedniki matematyczne.

Operacja hashSet Odpowiednik matematyczny
UnionWith Dodawanie unii lub zestawu
IntersectWith Przecięcia
ExceptWith Ustawianie odejmowania
SymmetricExceptWith Różnica symetryczna

Oprócz wymienionych operacji zestawu klasa HashSet<T> udostępnia również metody określania równości zestawu, nakładania się zestawów i tego, czy zestaw jest podzbiorem lub nadzbiorem innego zestawu.

Tylko program .NET Framework: w przypadku bardzo dużych HashSet<T> obiektów można zwiększyć maksymalną pojemność do 2 miliardów elementów w systemie 64-bitowym, ustawiając enabled atrybut <gcAllowVeryLargeObjects> elementu konfiguracji na true w środowisku czasu wykonywania.

Klasa HashSet<T> implementuje interfejs ISet<T>.

Operacje zestawów hashSet i LINQ

LINQ zapewnia dostęp do Distinctoperacji , Union, Intersecti Except ustawianych w dowolnym źródle danych, które implementuje IEnumerable interfejsy lub IQueryable . HashSet<T> zapewnia większą i bardziej niezawodną kolekcję operacji zestawów. Na przykład udostępnia porównania, HashSet<T> takie jak IsSubsetOf i IsSupersetOf.

Podstawową różnicą między operacjami i HashSet<T> operacjami zestawu LINQ jest to, że operacje zestawu LINQ zawsze zwracają nową IEnumerable<T> kolekcję, podczas gdy HashSet<T> równoważne metody modyfikują bieżącą kolekcję.

Zazwyczaj jeśli musisz utworzyć nowy zestaw lub jeśli aplikacja potrzebuje dostępu tylko do podanych operacji zestawu, użycie operacji zestawu LINQ dla dowolnej IEnumerable<T> kolekcji lub tablicy będzie wystarczające. Jeśli jednak aplikacja wymaga dostępu do dodatkowych operacji zestawu lub jeśli nie jest to pożądane lub konieczne do utworzenia nowej kolekcji, użyj HashSet<T> klasy .

W poniższej HashSet<T> tabeli przedstawiono operacje i ich równoważne operacje zestawu LINQ.

Operacja hashSet Odpowiednik LINQ
UnionWith Union
IntersectWith Intersect
ExceptWith Except
Nie podano. Distinct
SymmetricExceptWith Nie podano.
Overlaps Nie podano.
IsSubsetOf Nie podano.
IsProperSubsetOf Nie podano.
IsSupersetOf Nie podano.
IsProperSupersetOf Nie podano.
SetEquals Nie podano.